from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import json
from datetime import datetime
import os
import time

def scrape_cursor_changelog():
    # 配置Chrome选项
    chrome_options = Options()
    chrome_options.add_argument('--headless')  # 无界面模式
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    
    try:
        # 初始化浏览器
        driver = webdriver.Chrome(options=chrome_options)
        driver.get('https://cursor.sh/changelog')
        
        # 创建WebDriverWait对象，设置最长等待时间为20秒
        wait = WebDriverWait(driver, 20)
        
        # 等待页面加载完成（等待任意article元素出现）
        wait.until(EC.presence_of_element_located((By.TAG_NAME, 'article')))
        
        # 存储所有更新日志的列表
        changelog_data = []
        
        # 获取所有文章
        changelog_entries = driver.find_elements(By.TAG_NAME, 'article')
        print(f"找到 {len(changelog_entries)} 个更新日志条目")
        
        for entry in changelog_entries:
            try:
                # 获取完整内容并按行分割
                content_lines = entry.text.strip().split('\n')
                
                # 初始化变量
                version = ""
                date = ""
                title = ""
                content = entry.text.strip()  # 保存完整内容
                
                # 解析内容
                if len(content_lines) >= 3:
                    # 第一行通常是版本号
                    version = content_lines[0].strip()
                    # 第二行通常是日期
                    date = content_lines[1].strip()
                    # 第三行通常是标题
                    title = content_lines[2].strip()
                
                changelog_item = {
                    'version': version,
                    'date': date,
                    'title': title,
                    'content': content
                }
                
                changelog_data.append(changelog_item)
                print(f"成功处理条目: {version} - {date}")
                
            except Exception as e:
                print(f'处理条目时发生错误: {str(e)}')
                continue  # 继续处理下一个条目
        
        # 创建输出目录
        if not os.path.exists('output'):
            os.makedirs('output')
            
        # 生成文件名
        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
        filename = f'output/cursor_changelog_{timestamp}.json'
        
        # 保存数据
        with open(filename, 'w', encoding='utf-8') as f:
            json.dump(changelog_data, f, ensure_ascii=False, indent=4)
            
        print(f'更新日志已成功保存到: {filename}')
        print(f'共处理 {len(changelog_data)} 个条目')
        
    except Exception as e:
        print(f'爬取过程中发生错误: {str(e)}')
    finally:
        driver.quit()  # 确保关闭浏览器

if __name__ == '__main__':
    scrape_cursor_changelog()
